home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMIGATAX / AMIGATAX.ADF / Tax88 < prev    next >
Text File  |  1989-03-01  |  12KB  |  477 lines

  1. 0 REM v 0.2 Mar 1/89
  2. 1 DATA === ontario tax return ===,$1988
  3. 2 DATA .......jim butterfield....,c0;0
  4. 4 DATA ====page 1====,c0
  5. 5 DATA income from employment,#1;z2;i2
  6. 6 DATA family allowance,i2
  7. 7 DATA interest,i2
  8. 8 DATA divds tax candn corpns,#3;i2
  9. 9 DATA other income,i2
  10. 10 DATA total income,#5;c3;s2
  11. 11 DATA ====step 3====,c0
  12. 12 DATA reg pension contr,z3;i3
  13. 13 DATA union/prof dues,i3
  14. 14 DATA carrying charges,i3
  15. 15 DATA other deductions,i3
  16. 16 DATA total deductions,#6;c4;s3
  17. 17 DATA net income,#7;c4;v5-v6
  18. 18 DATA total dedns net inc,z3;i3
  19. 19 DATA taxable income,#8;c4;v7-s3
  20. 20 DATA ====step 4====,c0
  21. 21 DATA personal credit,z3;c3;6000
  22. 22 DATA age credit,i3[3236
  23. 23 DATA credit for spouse,i3[5000
  24. 24 DATA credit for children,i3
  25. 25 DATA cpp contributions,i3[478
  26. 26 DATA uic contributions,i3[690.56
  27. 27 DATA total medical expenses,#13;i2
  28. 28 DATA ..less 3% n.i.,#14;(v13>0);v7%3;c2
  29. 29 DATA allowable medical exp,(v13>0);v13-v14]0;c3
  30. 30 DATA other credits,i3
  31. 31 DATA line 335,#9;c4;s3[v8:REM guide confusing
  32. 32 DATA tax credits,#10;z4;c4;v9%17
  33. 33 DATA charitable donations,#11;i2
  34. 34 DATA credit at 17%,(v11>0);c4;v11[250%17
  35. 35 DATA credit at 29%,(v11>250);c4;v11-250]0%29
  36. 36 DATA total tax credits,#12;s4;c4
  37. 37 DATA =====schedule  1===,c0
  38. 38 DATA brckt,#15;v8;x;55000;27500;0
  39. 39 DATA ..on first,v15;c1
  40. 40 DATA ..tax is,#16;c2;y;11825;4675;0
  41. 41 DATA ..on remaining,#17;c1;v8-v15
  42. 42 DATA ..tax at percent..,#18;c1;y;29;26;17
  43. 43 DATA ..gives,#19;c2;v17%v18
  44. 44 DATA total,#20;c3;v16+v19
  45. 45 DATA total nr tax credit,v12;z3;c3
  46. 46 DATA divd tax credit,c3;v3%40/3[v20
  47. 47 DATA total credits,#21;c4;s3
  48. 48 DATA basic federal tax,#22;c4;v20-v21]0
  49. 49 DATA forgn tax deductions,#23;i3
  50. 50 DATA fed tax payable,#24;c4;v22-v23
  51. 51 DATA indiv surtax payable,#28;c4;v22%3
  52. 52 DATA ===ontario tax===,0
  53. 53 DATA basic ontario tax,#30;c3;v22%51
  54. 54 DATA ontario surtax,#31;c3;v30-10000]0%10
  55. 55 DATA adjusted tax,#32;c4;v30+v31
  56. 56 DATA tax reduction,#35;c3;0-v32*2+450]0[v32
  57. 57 DATA ontario tax payable,#36;c4;v32-v35
  58. 58 DATA ==ontario tax credits==,c0
  59. 59 DATA ontario tax credits,#50;i4
  60. 60 DATA ..complete form t1c(ont)..,(v50>0);c0;0
  61. 61 DATA ..spouse net incm needed..,(v50>0);c0;0
  62. 62 DATA ===step 5===,c0
  63. 63 DATA federal tax,c4;v24
  64. 64 DATA federal tax credits,#51;i3
  65. 65 DATA fed tax line 417,#52;c4;v24-v51
  66. 66 DATA indiv surtax payable,c4;v28
  67. 67 DATA net federal tax,#53;c4;v52+v28
  68. 68 DATA ontario tax payable,#54;c3;v36
  69. 69 DATA total payable,#55;c4;v53+v54
  70. 70 DATA child tax credit,z3;i3
  71. 71 DATA fed sales tax credit,i3
  72. 72 DATA ....complete schedule 7...,(s3>0);c0;0
  73. 73 DATA ..spouse net incm needed..,(s3>0);c0;0
  74. 74 DATA ontario tax credits,c3;v50
  75. 75 DATA tax deducted per slips,i3
  76. 76 DATA other credits,i3
  77. 77 DATA total credits,#58;c4;s3
  78. 78 DATA x,#59;v55-v58;(v58>v55);v58-v55
  79. 79 DATA x,$;----------
  80. 80 DATA * no balance *,#60;1;(v59<1);c0;0
  81. 81 DATA x,#61;v60;(v58>v55);2*v60
  82. 82 DATA * refund due *,(v61=2);c2;v59
  83. 83 DATA * balance payable *,(v61=1);c2;v59
  84. 194 DATA end,end,end
  85. REM: **** r u g  -  report utility generator ****
  86. REM: command lines... ( c$(.) )
  87. REM:   a series of commands, each of which is separated
  88. REM:           by a semicolon;
  89. REM:   line starting with # identifies variable line.
  90. REM:   line starting with $ is special titling line.
  91. REM: commands...
  92. REM:   may be an expression (see below), or:
  93. REM:   c# - print in column  (#=0 to 4, 0=no print)
  94. REM:   z# - clear column total (#=1 to 4)
  95. REM:   t# - print column total (#=1 to 4)
  96. REM:    (z or t may have multiples, e.g., z1234)
  97. REM:   j# - jump to specified line
  98. REM: expressions...
  99. REM:   (parentheses for test)  .. continue line if true (<>0)
  100. REM:   following may be mixed using operators (below)
  101. REM:     numeric values;
  102. REM:     i# for keyboard input (# is column);
  103. REM:     s# for column total   (# is column);
  104. REM:     v# for variable value;
  105. REM:     n   gets yes/no value
  106. REM:  operators (left-to-right evaluation):
  107. REM:   + addition   - subtraction
  108. REM:   * multiply   / divide
  109. REM:   % percentage (multiply)
  110. REM:   [ smaller of      ] greater of
  111. REM:   (example:  22[7 returns 7)
  112. REM:   > < = comparisons:  yield 0 (not true) or 1 (true)
  113. REM:   comparisons may be used multiply, e.g., v5<=100
  114. REM: examples...
  115. REM:      i3+100[500
  116. REM:   input value, add 100, if over 500 set to 500
  117. REM:   print result in column3
  118. REM:      c3;v12%10[100
  119. REM:   take 10% of value 12 (line 12) minimum 100
  120. REM:   and print in column 3
  121. REM:      500;(v15>1000);v15/2
  122. REM:   value 500; or if value 15 is greater than 1000
  123. REM:      set value v15/2.  do not print (no 'c' set).
  124. CLS
  125. PRINT " ."
  126. Ll=0
  127. FOR j=5 TO 6
  128.  FOR k=11 TO 12
  129.   Ll=Ll+POINT(k,j)
  130.  NEXT k
  131. NEXT j
  132. IF Ll=4 THEN Ll=80 ELSE Ll=60
  133. PRINT "Please wait..."
  134. PRINT
  135. PRINT "When prompted, you may enter:"
  136. PRINT "    [RETURN] (for 'zero' input);"
  137. PRINT "    numeric value <return>;"
  138. 'PRINT "    numeric value   +  "
  139. 'PRINT "      (to have items totalled);
  140. PRINT "    [F1][RETURN]   (to review or change data)."
  141. PRINT
  142. PRINT "Ontario 1987 income tax"
  143. PRINT
  144. PRINT "This program does not give tax advice"
  145. PRINT "  ..just helps with the arithmetic."
  146. PRINT
  147. PRINT "This is *not* the computer tax format"
  148. PRINT "accepted for filing by Revenue Canada."
  149. PRINT
  150. PRINT "Some tax calculations call for spouse's income"
  151. PRINT " .. not detailed in this program."
  152. PRINT
  153. DIM i$(200),i%(200),v&(200),c$(200),c%(4),t&(4)
  154. c%(1)=1:c%(2)=2:c%(3)=4:c%(4)=8
  155. READ i$
  156. j=0
  157. WHILE i$<>"end"
  158.  j=j+1
  159.  READ c$
  160.  L0=1
  161.  IF LEFT$(c$,1)="#" THEN
  162.   L0=INSTR(c$,";")
  163.   t=VAL(MID$(c$,2,L0-1))
  164.   IF i%(t)<>0 GOTO LinErr1
  165.   i%(t)=j:L0=L0+1
  166.  END IF
  167.  i$(j)=i$:c$(j)=MID$(c$,L0)
  168.  READ i$
  169. WEND
  170. PRINT
  171. OPEN "scrn:" FOR OUTPUT AS #4
  172. c1=1
  173.     'Next Item
  174. NxLine:
  175.  WHILE c$(c1)<>"" 
  176.  c0=-1:t3=0:c=c1:c1=c1+1
  177.  IF c$(c)="c0" THEN c9=c
  178.  L0=1:L1=LEN(c$(c))
  179.  InptFlg=0
  180.  IF ASC(c$(c))=36 THEN
  181.       ' $ at start of line
  182.   GOSUB BuckLine
  183.  ELSE
  184.   WHILE L0<=L1
  185.    L2=INSTR(MID$(c$(c),L0),";")
  186.    IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  187.    ComdLen=L2-L0
  188.    t=ASC(MID$(c$(c),L0)):IF t>96 THEN t=t-32
  189.    IF t=67 OR (PrtFlg AND t=73) THEN  ' c or i/print
  190.      REM: c - set column value
  191.      c0=VAL(MID$(c$(c),L0+1,ComdLen-1)):e=(c0>4):IF e GOTO LinErr1
  192.      c0=c%(c0)
  193.    ELSEIF t=40 THEN     '  REM (
  194.     REM: (..) evaluate and continue/quit
  195.     e=ASC(MID$(c$(c),L2-1))<>41:IF e GOTO LinErr1
  196.     e=(L2-L0)<3:IF e GOTO LinErr1
  197.     L8=L0+1:L9=L2-1:GOSUB Eval
  198.     IF v#=0 THEN L2=L1  'exit
  199.    ELSEIF t=74 THEN     '  REM j
  200.     REM: j - jump to line
  201.     v=VAL(MID$(c$(c),L0+1,ComdLen-1))
  202.     c1=i%(v)
  203.     L2=L1  'exit
  204.    ELSEIF PrtFlg THEN
  205.     ' pass 2 .. don't calculate
  206.    ELSEIF t=88 THEN     '  REM x
  207.     REM x - table lookup
  208.     y=0:v0#=v&(c)/100#:v#=v0#+1#
  209.     L0=L2+1
  210.     WHILE v#>v0# AND L0<=L1
  211.      y=y+1
  212.      L2=INSTR(MID$(c$(c),L0),";")
  213.      IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  214.      ComdLen=L2-L0
  215.      v#=VAL(MID$(c$(c),L0,ComdLen))
  216.      L0=L2+1
  217.     WEND
  218.     v&(c)=INT(v#*100#+.5#)
  219.     L2=L1    'exit
  220.    ELSEIF t=89 THEN    '  REM y
  221.     REM y - table usage
  222.     y1=0
  223.     L0=L2+1
  224.     WHILE y1<y AND L2<L1
  225.      y1=y1+1
  226.      L2=INSTR(MID$(c$(c),L0),";")
  227.      IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  228.      ComdLen=L2-L0
  229.      v#=VAL(MID$(c$(c),L0,ComdLen))
  230.      L0=L2+1
  231.     WEND
  232.     v&(c)=INT(v#*100#+.5#)
  233.     L2=L1   'exit
  234.    ELSEIF t=84 OR t=90 THEN
  235.       '  T/Z multiple column functions
  236.     c8=c0:c0=0
  237.     FOR j=L0+1 TO L2-1
  238.      t0=VAL(MID$(c$(c),j,1))
  239.      c0=c0 OR c%(t0)
  240.     NEXT j
  241.     IF t=90 THEN
  242.      FOR j=1 TO 4
  243.       IF (c0 AND c%(j))<>0 THEN t&(j)=0
  244.      NEXT j
  245.      c0=c8
  246.     ELSE
  247.      t3=1
  248.     END IF
  249.    ELSE
  250.     GOSUB SeekVal
  251.     IF t0 AND NOT InptFlg THEN
  252.      L8=L0:L9=L2:GOSUB Eval
  253.      IF ASC(RIGHT$(" "+v$,1))=129 GOTO Revise 
  254.     END IF
  255.     IF t0=0 GOTO LinErr0
  256.     v&(c)=INT(v#*100+.5)
  257.    END IF
  258.    L0=L2+1
  259.   WEND
  260.   GOSUB Echo
  261.  END IF
  262. WEND
  263.  
  264. REM: end of control strings
  265. IF PrtFlg=0 THEN
  266.  IF c9=0 GOTO AskPrint
  267.  INPUT "want to revise this";x$
  268.  x$=UCASE$(x$)
  269.  IF x$="Y" OR x$="YES" GOTO Revise
  270. AskPrint: 
  271.  CLOSE 4:INPUT "want a printout";x$
  272.  x$=UCASE$(x$)
  273.  IF x$="Y" OR x$="YES" THEN
  274.   c1=1:OPEN "prt:" FOR OUTPUT AS #4:Ll=80:InptFlg=0:PrtFlg=-1
  275.   GOTO NxLine
  276.  END IF
  277. END IF
  278. PRINT ">>> end <<<"
  279. END
  280.  
  281.    ' revision time
  282. Revise:
  283.  IF c9>0 THEN
  284.   PRINT:r=0
  285.   FOR j=1 TO c9
  286.    IF c$(j)="c0" THEN r=r+1:PRINT r;">>> ";i$(j)
  287.   NEXT j
  288.   r1=1
  289.   IF r>1 THEN
  290.     PRINT "go back to which one (1 to";r;")";
  291.     INPUT r1
  292.   END IF
  293.   IF r1>0 AND r1<=r THEN
  294.    r=0
  295.    FOR j=1 TO c9
  296.     IF c$(j)="c0" THEN r=r+1:IF r=r1 THEN c=j
  297.    NEXT j
  298.   END IF
  299.  END IF
  300.  c1=c:GOTO NxLine
  301.  
  302. LinErr0:
  303.  PRINT "error item";c;"' ";MID$(c$(c),L0);" '":STOP
  304. LinErr1:
  305.  PRINT "error item";c;"' ";MID$(c$(c),L1);" '":STOP
  306. LinErr2:
  307.  PRINT "error item";c;"' ";MID$(c$(c),L8,L5-L8);" '":STOP
  308.  
  309. REM evaluate
  310. Eval:
  311.  v#=0:OpNow=10
  312.  REM get a command
  313.  WHILE L8<L9
  314.   PtOp2=L8:t0=0
  315.   GOSUB SeekOp
  316.   OpNext=t0
  317.   L5=PtOp1
  318.   e=L5<=L8:IF e GOTO LinErr2
  319.   t=ASC(MID$(c$(c),L8))
  320.   IF t>96 THEN t=t-32
  321.   GOSUB SeekVal
  322.   e=t0=0:IF e GOTO LinErr2
  323.   IF (t>47 AND t<58) OR t=46 THEN
  324.    ' Numeric
  325.    v0#=VAL(MID$(c$(c),L8,L5-L8))
  326.   ELSEIF t=83 OR t=86 THEN
  327.    ' S or V
  328.    v1=VAL(MID$(c$(c),L8+1,L5-L8-1))
  329.    IF t=83 THEN v0#=t&(v1)/100#
  330.    IF t=86 THEN
  331.    e=i%(v1)=0
  332.    IF e THEN PRINT "** no param";v1:GOTO LinErr2
  333.    v0#=v&(i%(v1))/100#
  334.    END IF
  335.   ELSEIF t=78 THEN
  336.       '  Y or N
  337.    e=InptFlg:IF e GOTO LinErr2
  338.    REM: y for yes/no
  339.    WINDOW 2,"[Y] or [N]",(10,10)-(400,30),24
  340.    WINDOW OUTPUT 2
  341.    InptFlg=-1
  342.    PRINT i$(c);"(y/n) ";
  343.    INPUT y$:y$=UCASE$(y$)
  344.    WINDOW CLOSE 2
  345.    v0#=0:IF y$="Y" THEN v0#=1
  346.   ELSE
  347.      'Inpt
  348.    e=InptFlg:IF e GOTO LinErr2
  349.    InptFlg=-1
  350.    c0=VAL(MID$(c$(c),L8+1,L5-L8-1))
  351.    e=(c0<1 OR c0>4)
  352.    IF e GOTO LinErr2
  353.    c0=c%(c0)
  354.    IF v&(c)=0 THEN
  355.     WINDOW 2,i$(c),(10,10)-(400,30),24
  356.    ELSE
  357.     GOSUB DolCents:v$=LEFT$(v$,1)+d$
  358.     IF c$<>"00" THEN v$=v$+".":v$=v$+c$
  359.     WINDOW 2,"[RETURN]="+v$,(10,10)-(400,30),24
  360.    END IF
  361.    WINDOW OUTPUT 2
  362.    PRINT i$(c);"? ";
  363.    LINE INPUT v$
  364.    IF v$<>"" THEN
  365.     v0#=VAL(v$)
  366.    ELSE
  367.     v0#=v&(c)/100#
  368.    END IF
  369.    WINDOW CLOSE 2
  370.    IF ASC(RIGHT$(" "+v$,1))=129 THEN RETURN
  371.   END IF
  372.   '  perform dyadic operation
  373.   ON OpNow GOSUB lt,eq,le,gr,ne,ge,br,pct,ml,ad,sb,div,flr,cei
  374.   OpNow=OpNext:L8=PtOp2
  375.  WEND
  376. RETURN
  377.  
  378. ad: v#=v#+v0#
  379.     RETURN
  380. sb: v#=v#-v0#
  381.     RETURN
  382. ml: v#=v#*v0#
  383.     RETURN
  384. div: v#=v#/v0#
  385.     RETURN
  386. pct: v#=v#*v0#/100#
  387.     RETURN
  388. flr: IF v#>v0# THEN v#=v0#
  389.     RETURN
  390. cei: IF v#<v0# THEN v#=v0#
  391.     RETURN
  392. lt: v#=-(v#<v0#)
  393.     RETURN
  394. eq: v#=-(v#=v0#)
  395.     RETURN
  396. le: v#=-(v#<=v0#)
  397.     RETURN
  398. gr: v#=-(v#>v0#)
  399.     RETURN
  400. ne: v#=-(v#<>0#)
  401.     RETURN
  402. ge: v#=-(v#>=0#)
  403.     RETURN
  404. br: v#=1
  405.     RETURN
  406.  
  407. Echo:
  408.  IF c0>=0 THEN
  409.   PRINT#4,LEFT$(i$(c)+SPACE$(21),21);" ";
  410.    IF c0>=1 THEN
  411.     FOR j=1 TO 4
  412.      IF (c0 AND c%(j))=0 THEN
  413.       IF Ll>60 OR j<>1 THEN PRINT#4,SPACE$(12);
  414.      ELSE
  415.       IF t3=0 THEN
  416.        t&(j)=t&(j)+v&(c)
  417.       ELSE
  418.        v&(c)=t&(j):t&(j)=0
  419.       END IF
  420.       GOSUB DolCents
  421.       cr$="  ":IF LEFT$(v$,1)="-" THEN cr$="cr"
  422.       d$=RIGHT$(SPACE$(6)+d$,6):cm$=MID$(d$,3,1)
  423.       IF cm$<>" " THEN cm$=","
  424.       PRINT#4,LEFT$(d$,3);cm$;MID$(d$,4);".";c$;cr$;
  425.      END IF
  426.     NEXT j
  427.    END IF 
  428.    PRINT#4,
  429.   END IF
  430. RETURN
  431.  
  432. DolCents:
  433.  v$=STR$(v&(c)):IF LEN(v$)<3 THEN v$=LEFT$(v$,1)+"0"+RIGHT$(v$,1)
  434.  c$=RIGHT$(v$,2):d$=MID$(v$,2,LEN(v$)-3)
  435.  IF LEN(d$)>6 THEN d$="******"
  436. RETURN
  437.  
  438.  REM: dollars line
  439. BuckLine:
  440.  PRINT#4,LEFT$(i$(c)+SPACE$(21),21);" ";
  441.  L0=2
  442. WHILE L0<=L1
  443.  L2=INSTR(MID$(c$(c),L0),";")
  444.  IF L2=0 THEN L2=L1+1 ELSE L2=L2+L0-1
  445.  ComdLen=L2-L0
  446.  IF L2>0 THEN PRINT#4,RIGHT$(SPACE$(10)+MID$(c$(c),L0,ComdLen),10);"  ";
  447.  IF L2=0 THEN PRINT#4,SPACE$(12);
  448.  L0=L2+1
  449. WEND
  450.  PRINT#4,
  451. RETURN
  452.  
  453.       ' value types
  454. SeekVal:
  455.  t0=INSTR("0123456789.IVSN",CHR$(t))
  456. RETURN
  457.       ' operators and comparison groups
  458. SeekOp:
  459.   PtOp1=0
  460.   t0=0
  461.   t2=0
  462.  WHILE PtOp2<L9 AND ((t0=0 AND PtOp1=0) OR (t0<>0 AND PtOp1<>0))
  463.   PtOp2=PtOp2+1
  464.   t1=t0
  465.   t0=INSTR("<==>===%*+-/[]",MID$(c$(c),PtOp2,1))
  466.   t2=t2 OR t0
  467.   IF t0<>0 AND PtOp1=0 THEN PtOp1=PtOp2
  468.  WEND
  469.  IF t1=t2 THEN
  470.   t0=t1
  471.  ELSE
  472.   IF t2<8 THEN t0=t2
  473.  END IF
  474.  IF PtOp1=0 THEN PtOp1=L9
  475. RETURN
  476. END
  477.